<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <!--  
        1. 倍数
            <<n     乘以2的n次方
            >>n     除以2的n次方(抛弃小数位)
    -->
    <script>
        var x = 5;
        console.log(x << 1);// 5 * 2的1次方 = 10
        console.log(x << 2);// 5 * 2的2次方 = 20
        console.log(x >> 1);// 5 / 2的1次方 = 2.5 = 2(抛弃小数位)
        console.log(x >> 2);// 5 / 2的2次方 = 1.25= 1(抛弃小数位)
    </script>
    <!--  
        2. 取整
            右移0位
            按位或0
            按位异或0
            双取反
    -->
    <script>
        var x = 5.23;
        console.log(x >> 0);// 5
        console.log(x | 0);// 5
        console.log(x ^ 0);// 5
        console.log( ~~x );// 5
    </script>
    <!--  
        3. 奇偶数
            按位与1
            结果为0:偶数
            结果为1:奇数
    -->
    <script>
        console.log(0 & 1);
        console.log(1 & 1);
        console.log(2 & 1);
        console.log(3 & 1);
        console.log(4 & 1);
        console.log(5 & 1);
        console.log(6 & 1);
    </script>
    <!--  
        4. 交换数据
            * 经典写法(利用临时变量,也称之为第三方变量)
            * 高效写法(三次异或等)
    -->
    <script>
        // 经典写法
        var a = 10;
        var b = 5;
        var tmp = a;
        a = b;
        b = tmp;
        console.log(a,b);
        // 高效写法(没有申请第三个变量,节省内存)
        var a = 10;
        var b = 5;
        a ^= b;
        b ^= a;
        a ^= b;
        console.log(a,b);
    </script>
</body>
</html>